package br.com.drogaria.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import br.com.drogaria.domain.Fabricante;
import br.com.drogaria.factory.ConexaoFactory;

public class FabricanteDAO {

	public void salvar(Fabricante f) throws SQLException {
		StringBuilder sql = new StringBuilder();
		sql.append("INSERT INTO fabricante (descricao) VALUES (?)");

		Connection conexao = ConexaoFactory.conectar();

		PreparedStatement commando = conexao.prepareStatement(sql.toString());
		commando.setString(1, f.getDescricao());
		commando.executeUpdate();
	}

	public void excluir(Fabricante f) throws SQLException {
		StringBuilder sql = new StringBuilder();
		sql.append("DELETE FROM fabricante WHERE codigo = ?");

		Connection conexao = ConexaoFactory.conectar();

		PreparedStatement commando = conexao.prepareStatement(sql.toString());
		commando.setLong(1, f.getCodigo());
		commando.executeUpdate();
	}

	public void editar(Fabricante f) throws SQLException {
		StringBuilder sql = new StringBuilder();
		sql.append("UPDATE fabricante SET descricao = ? WHERE codigo = ?");

		Connection conexao = ConexaoFactory.conectar();

		PreparedStatement commando = conexao.prepareStatement(sql.toString());
		commando.setString(1, f.getDescricao());
		commando.setLong(2, f.getCodigo());
		commando.executeUpdate();
	}

	public Fabricante buscarPorCodigo(Fabricante f) throws SQLException {
		StringBuilder sql = new StringBuilder();
		sql.append("SELECT codigo as codigo, descricao as descricao FROM  fabricante WHERE codigo = ?");

		Connection conexao = ConexaoFactory.conectar();

		PreparedStatement commando = conexao.prepareStatement(sql.toString());
		commando.setLong(1, f.getCodigo());
		ResultSet resultado = commando.executeQuery();

		Fabricante retorno = null;

		if (resultado.next()) {
			retorno = new Fabricante();
			retorno.setCodigo(resultado.getLong("codigo"));
			retorno.setDescricao(resultado.getString("descricao"));
		}

		return retorno;
	}

	public ArrayList<Fabricante> listar() throws SQLException {
		StringBuilder sql = new StringBuilder();
		sql.append("SELECT codigo as codigo, descricao as descricao FROM  fabricante ORDER BY descricao ASC");

		Connection conexao = ConexaoFactory.conectar();

		PreparedStatement commando = conexao.prepareStatement(sql.toString());
		ResultSet resultado = commando.executeQuery();

		ArrayList<Fabricante> lista = new ArrayList<Fabricante>();

		while (resultado.next()) {
			Fabricante f = new Fabricante();
			f.setCodigo(resultado.getLong("codigo"));
			f.setDescricao(resultado.getString("descricao"));

			lista.add(f);
		}

		return lista;
	}
	
	public ArrayList<Fabricante> buscarPorDescricao(Fabricante f) throws SQLException{
		StringBuilder sql = new StringBuilder();
		sql.append("SELECT codigo as codigo, descricao as descricao FROM  fabricante WHERE descricao LIKE ? ORDER BY descricao ASC");

		Connection conexao = ConexaoFactory.conectar();

		PreparedStatement commando = conexao.prepareStatement(sql.toString());
		commando.setString(1, "%" + f.getDescricao() + "%");
		ResultSet resultado = commando.executeQuery();

		ArrayList<Fabricante> lista = new ArrayList<Fabricante>();

		while (resultado.next()) {
			Fabricante item = new Fabricante();
			item.setCodigo(resultado.getLong("codigo"));
			item.setDescricao(resultado.getString("descricao"));

			lista.add(item);
		}

		return lista;
	}
	

	public static void main(String[] args) {
		try {
			Fabricante f1 = new Fabricante();
			f1.setDescricao("NOVA");
			
			FabricanteDAO fdao = new FabricanteDAO();
			ArrayList<Fabricante> lista = fdao.buscarPorDescricao(f1);

			for (Fabricante f : lista) {
				System.out.println("Resultado: " + f);
			}

			System.out
					.println("Fabricantes PESQUISADO/INCLUIDO/ALTERADO com sucesso!");

		} catch (SQLException e) {
			System.out
					.println("ERRO ao tentar pesquisar/editar/salvar um dos fabricantes!");
			e.printStackTrace();
		}
	}
}
